package com.ligongmusic.domain;

import java.util.ArrayList;
import java.util.List;

public class LrcRow implements Comparable<LrcRow> {
	public final static String TAG = "LrcRow";

	/** 该行歌词要开始播放的时间，格式如下：[02:34.14] */
	public String strTime;

	/**
	 * 该行歌词要开始播放的时间，由[02:34.14]格式转换为long型， 即将2分34秒14毫秒都转为毫秒后
	 * 得到的long型值：time=02*60*1000+34*1000+14
	 */
	public long time;

	/** 该行歌词的内容 */
	public String content;

	public LrcRow() {
	}

	public LrcRow(String strTime, long time, String content) {
		this.strTime = strTime;
		this.time = time;
		this.content = content;
		// Log.d(TAG,"strTime:" + strTime + " time:" + time + " content:" +
		// content);
	}

	@Override
	public String toString() {
		return "[" + strTime + " ]" + content;
	}

	/**
	 * 读取歌词的每一行内容，转换为LrcRow，加入到集合中
	 */
	public static List<LrcRow> createRows(String standardLrcLine) {
		/**
		 * 一行歌词只有一个时间的 例如：徐佳莹 《我好想你》 [01:15.33]我好想你 好想你
		 * 
		 * 一行歌词有多个时间的 例如：草蜢 《失恋战线联盟》 [02:34.14][01:07.00]当你我不小心又想起她
		 * [02:45.69][02:42.20][02:37.69][01:10.60]就在记忆里画一个叉
		 **/
		try {
			if (standardLrcLine.indexOf("[") != 0
					|| standardLrcLine.indexOf("]") != 9) {
				return null;
			}
			// [02:34.14][01:07.00]当你我不小心又想起她
			// 找到最后一个 ‘]’ 的位置
			int lastIndexOfRightBracket = standardLrcLine.lastIndexOf("]");
			// 歌词内容就是 ‘]’ 的位置之后的文本 eg: 当你我不小心又想起她
			String content = standardLrcLine.substring(
					lastIndexOfRightBracket + 1, standardLrcLine.length());
			// 歌词时间就是 ‘]’ 的位置之前的文本 eg: [02:34.14][01:07.00]

			/**
			 * 将时间格式转换一下 [mm:ss.SS][mm:ss.SS] 转换为 -mm:ss.SS--mm:ss.SS-
			 * 即：[02:34.14][01:07.00] 转换为 -02:34.14--01:07.00-
			 */
			String times = standardLrcLine
					.substring(0, lastIndexOfRightBracket + 1)
					.replace("[", "-").replace("]", "-");
			// 通过 ‘-’ 来拆分字符串
			String arrTimes[] = times.split("-");
			List<LrcRow> listTimes = new ArrayList<LrcRow>();
			for (String temp : arrTimes) {
				if (temp.trim().length() == 0) {
					continue;
				}
				/**
				 * [02:34.14][01:07.00]当你我不小心又想起她
				 * 
				 * 上面的歌词的就可以拆分为下面两句歌词了 [02:34.14]当你我不小心又想起她 [01:07.00]当你我不小心又想起她
				 */
				LrcRow lrcRow = new LrcRow(temp, timeConvert(temp), content);
				listTimes.add(lrcRow);
			}
			return listTimes;
		} catch (Exception e) {
//			Log.e(TAG, "createRows exception:" + e.getMessage());
			return null;
		}
	}

	/**
	 * 将解析得到的表示时间的字符转化为Long型
	 */
	private static long timeConvert(String timeString) {
		// 因为给如的字符串的时间格式为XX:XX.XX,返回的long要求是以毫秒为单位
		// 将字符串 XX:XX.XX 转换为 XX:XX:XX
		timeString = timeString.replace('.', ':');
		// 将字符串 XX:XX:XX 拆分
		String[] times = timeString.split(":");
		// mm:ss:SS
		return Integer.valueOf(times[0]) * 60 * 1000 + // 分
				Integer.valueOf(times[1]) * 1000 + // 秒
				Integer.valueOf(times[2]);// 毫秒
	}

	/**
	 * 排序的时候，根据歌词的时间来排序
	 */
	public int compareTo(LrcRow another) {
		return (int) (this.time - another.time);
	}
}
